package com.ruoyi.system.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.AppLoginLog;
import com.ruoyi.system.domain.AppNoticeMessage;
import com.ruoyi.system.domain.vo.AppNoticeMessageSearchVo;
import com.ruoyi.system.domain.vo.AppNoticeMessageVo;
import com.ruoyi.system.dto.AppNoticeMessageDTO;
import com.ruoyi.system.dto.MemberPackageDTO;
import com.ruoyi.system.mapper.AppLoginLogMapper;
import com.ruoyi.system.mapper.AppNoticeMessageMapper;
import com.ruoyi.system.service.IAppLoginLogService;
import com.ruoyi.system.service.IAppNoticeMessageService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
@Service
public class AppNoticeMessageServiceImpl  extends ServiceImpl<AppNoticeMessageMapper, AppNoticeMessage> implements IAppNoticeMessageService {
    @Autowired
    private AppNoticeMessageMapper appNoticeMessageMapper;

    @Override
    public Boolean addOrUpdate(AppNoticeMessageVo vo) {
        boolean result = false;
        if (vo.getId() != null) {
            // 编辑
            AppNoticeMessage appNoticeMessage = appNoticeMessageMapper.selectById(vo.getId());
            if (appNoticeMessage != null) {
                appNoticeMessage.setTitle(vo.getTitle());
                appNoticeMessage.setContent(vo.getContent());
                appNoticeMessage.setStatus(vo.getStatus());
                appNoticeMessage.setCoverUrl(vo.getCoverUrl());
                appNoticeMessage.setRemark(vo.getRemark());
                appNoticeMessageMapper.updateById(appNoticeMessage);
                result = true;
            }
        } else {
            // 新增
            AppNoticeMessage appNoticeMessage = new AppNoticeMessage();
            BeanUtils.copyProperties(vo,appNoticeMessage);
            appNoticeMessageMapper.insert(appNoticeMessage);
            result = true;
        }
        if (result){
            // 往客户端推数据
        }
        return result;
    }

    @Override
    public List<AppNoticeMessageDTO> getList(AppNoticeMessageSearchVo searchVo) {
        LambdaQueryWrapper<AppNoticeMessage> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(StringUtils.isNotBlank(searchVo.getTitle()),AppNoticeMessage::getTitle,searchVo.getTitle());
        wrapper.eq(searchVo.getStatus() != null,AppNoticeMessage::getStatus,searchVo.getStatus());
        wrapper.eq(searchVo.getType() != null,AppNoticeMessage::getType,searchVo.getType());
        wrapper.eq(AppNoticeMessage::getDelFlag,0);
        wrapper.orderByDesc(AppNoticeMessage::getCreateTime);
        List<AppNoticeMessage> appNoticeMessages = appNoticeMessageMapper.selectList(wrapper);
        List<AppNoticeMessageDTO> response = new ArrayList<>();
        for (AppNoticeMessage appNoticeMessage : appNoticeMessages) {
            AppNoticeMessageDTO dto = new AppNoticeMessageDTO();
            BeanUtils.copyProperties(appNoticeMessage,dto);
            response.add(dto);
        }
        return  response;
    }

    @Override
    public int countList(AppNoticeMessageSearchVo searchVo) {
        LambdaQueryWrapper<AppNoticeMessage> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(StringUtils.isNotBlank(searchVo.getTitle()),AppNoticeMessage::getTitle,searchVo.getTitle());
        wrapper.eq(searchVo.getStatus() != null,AppNoticeMessage::getStatus,searchVo.getStatus());
        wrapper.eq(searchVo.getType() != null,AppNoticeMessage::getType,searchVo.getType());
        wrapper.eq(AppNoticeMessage::getDelFlag,0);
        wrapper.orderByDesc(AppNoticeMessage::getCreateTime);
        Long count = appNoticeMessageMapper.selectCount(wrapper);
        return Math.toIntExact(count);
    }

    @Override
    public AppNoticeMessageDTO getInfo(Long id) {
        AppNoticeMessage appNoticeMessage = appNoticeMessageMapper.selectById(id);
        AppNoticeMessageDTO appNoticeMessageDTO = new AppNoticeMessageDTO();
        BeanUtils.copyProperties(appNoticeMessage,appNoticeMessageDTO);
        return appNoticeMessageDTO;
    }

    @Override
    public Boolean del(Long id) {
        AppNoticeMessage appNoticeMessage = new AppNoticeMessage();
        appNoticeMessage.setDelFlag("2");
        appNoticeMessage.setId(id);
        return appNoticeMessageMapper.updateById(appNoticeMessage) > 1;
    }
}
